var app = new getApp();
const Http = require('../../utils/http.js');
Component({
  options: { 
    addGlobalClass: true, //引入外部样式
    },
  /**
   * 组件的属性列表
   */
  properties: {
    list: { // 宝贝列表
      type: Array, // 类型（必填），目前接受的类型包括：String, Number, Boolean, Object, Array, null（表示任意类型）
      value: [], // 属性初始值（可选），如果未指定则会根据类型选择一个
      observer: function (newVal, oldVal) { } // 属性被改变时执行的函数（可选），也可以写成在methods段中定义的方法名字符串, 如：'_propertyChange'
    },
    editable:{//是否可编辑
      type:Boolean,
      value:false
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    delBtnWidth: 185, //删除按钮宽度单位（rpx）
    startX: ""
  },
  ready: function () {
    this.initEleWidth();
  },
  /**
   * 组件的方法列表
   */
  methods: {
    //计数器改变
    updateCount(e){
      const count = e.detail;
      const index = e.currentTarget.dataset.idx;
      const targetVal = 'list[' + index + '].count';
      this.setData({
        [targetVal]:count
      });
      this.triggerEvent('updateBblist', this.data.list)
    },
    //勾选
    selectClick(e) {
      const idx = e.currentTarget.dataset.idx;
      const slct = e.currentTarget.dataset.slct;
      console.log(slct)
      const targetVal = 'list[' + idx + '].selected'
      this.setData({
        [targetVal]: !slct
      })
      this.triggerEvent('updateBblist', this.data.list)
    },
    touchS: function (e) {
      if (this.data.editable)return
      if (e.touches.length == 1) {
        this.setData({
          //设置触摸起始点水平方向位置
          startX: e.touches[0].clientX
        });
      }
    },
    touchM: function (e) {
      if (this.data.editable) return
      if (e.touches.length == 1) {
        //手指移动时水平方向位置
        var moveX = e.touches[0].clientX;
        //手指起始点位置与移动期间的差值
        var disX = this.data.startX - moveX;
        var delBtnWidth = this.data.delBtnWidth;
        var txtStyle = "";
        if (disX == 0 || disX < 0) {//如果移动距离小于等于0，说明向右滑动，文本层位置不变
          txtStyle = "left:0px";
        } else if (disX > 0) {//移动距离大于0，文本层left值等于手指移动距离
          txtStyle = "left:-" + disX + "px";
          if (disX >= delBtnWidth) {
            //控制手指移动距离最大值为删除按钮的宽度
            txtStyle = "left:-" + delBtnWidth + "px";
          }
        }
        //获取手指触摸的是哪一项
        var index = e.currentTarget.dataset.index;
        var list = this.data.list;
        list[index].txtStyle = txtStyle;
        //更新列表的状态
        this.setData({
          list: list
        });
      }
    },
    touchE: function (e) {
      if (this.data.editable) return
      if (e.changedTouches.length == 1) {
        //手指移动结束后水平位置
        var endX = e.changedTouches[0].clientX;
        //触摸开始与结束，手指移动的距离
        var disX = this.data.startX - endX;
        var delBtnWidth = this.data.delBtnWidth;
        //如果距离小于删除按钮的1/2，不显示删除按钮
        var txtStyle = disX > delBtnWidth / 2 ? "left:-" + delBtnWidth + "px" : "left:0px";
        //获取手指触摸的是哪一项
        var index = e.currentTarget.dataset.index;
        var list = this.data.list;
        list[index].txtStyle = txtStyle;
        //更新列表的状态
        this.setData({
          list: list
        });
      }
      console.log(this.data.list)
    },
    //获取元素自适应后的实际宽度
    getEleWidth: function (w) {
      var real = 0;
      try {
        var res = wx.getSystemInfoSync().windowWidth;
        var scale = (750 / 2) / (w / 2);//以宽度750px设计稿做宽度的自适应
        real = Math.floor(res / scale);
        return real;
      } catch (e) {
        return false;
        // Do something when catch error
      }
    },
    initEleWidth: function () {
      var delBtnWidth = this.getEleWidth(this.data.delBtnWidth);
      this.triggerEvent('getDelBtnWidth', delBtnWidth)
      this.setData({
        delBtnWidth: delBtnWidth
      });
    },
    //点击删除按钮事件
    delItem: function (e) {
      const index = e.currentTarget.dataset.index;
      const bizid = e.currentTarget.dataset.bizid;
      wx.showLoading({
        title: '删除中',
        mask: true
      })
      Http.Request('DELETE', `/api/customer/shoppingCart/delete/${bizid}/v1`).then(res=>{
        wx.hideLoading();
        wx.showToast({
          title: '删除成功',
          icon: 'success',
          duration: app.globalData.duration
        })
        let list = this.data.list;
        list.splice(index, 1);
        this.setData({
          list: list
        });
        this.triggerEvent('updateBblist', this.data.list)
      }).catch(err=>{
        wx.hideLoading();
        wx.showToast({
          title: err,
          icon: 'none',
          duration: app.globalData.duration
        })
      })
     
    },
  }
})
